//package com.sg.java;
//
//import cn.hutool.core.date.DateTime;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.ObjectUtil;
//import com.sg.java.constant.Constant;
//import com.sg.java.entity.*;
//import com.sg.java.enums.VoltageLevelEnum;
//import com.sg.java.util.*;
//import lombok.extern.log4j.Log4j;
//import org.apache.commons.lang3.StringUtils;
//import redis.clients.jedis.Jedis;
//
//import java.io.File;
//import java.math.BigDecimal;
//import java.text.ParseException;
//import java.util.*;
//
///**
// * @author lhy
// * @date 2022/7/21 9:43
// */
//
//@Log4j
//public class YhVolt2 {
//
//
//    private static YHVolt yhVolt;
//    private static List<String> pointList = null;
//
//    //电压等级
//    private static HashMap<String, Double> acMap = new HashMap<>();
//
//    //配变电压等级
//    private static HashMap<String, Double> pbacMap = new HashMap<>();
//
//    //严重越上
//    private static HashMap<String, Double> yzpbMap = new HashMap<>();
//
//    //有效数据越上限越下限阈值
//    private static HashMap<String, Double> effectiveDataMap = new HashMap<>();
//
//    //用户关联关系
//    private static HashMap<String, String> yhMap = new HashMap<>();
//
//    //用户和配变关系
//    private static HashMap<String, String> yhPidMap = new HashMap<>();
//
//    //配变测点关系
//    private static HashMap<String, String> pbGxMap = new HashMap<>();
//
//    private static boolean flag = true;
//
//    public static final String pbgx = "202208051pbgx";
//    public static final String yhgx = "20220808yhgx";
//    public static final String yhpb = "20220815yhPid";
////    public static final String pbgx = "20220817pbgx111";
////    public static final String yhgx = "20220817yhgx111";
////    public static final String yhpb = "20220817yhTopb111";
//
////    @SneakyThrows
////    public static YHVolt getInstance() {
////        if (yhVolt == null) {
////            synchronized (YHVolt.class) {
////                if (yhVolt == null) {
////                    yhVolt = new YHVolt();
////                    log.info("加载关系");
////                    String pbgx = "20220806pbgx111";
////                    String yhgx = "20220806yhgx111";
//////                    JedisUtils.InitJedisPool("25.64.41.53", 6379, 100000, "Huawei@169");
//////                    jp = JedisUtils.getJp();
////                    readProperties(pbgx, yhgx);
////                }
////            }
////        }
////        return yhVolt;
////    }
//
//
//    public static void initReadProperties() {
//        try {
//            String path = System.getProperty("user.dir") + File.separator + "conf" + File.separator;
//            path = "/jenkins_home/datax/bin/conf/";
//            PropertiesUtils.readProperties(path + "ac.properties", acMap);
//
//            PropertiesUtils.readProperties(path + "pbac.properties", pbacMap);
//
//            //配变用户严重阈值
//            PropertiesUtils.readProperties(path + "yzpb.properties", yzpbMap);
//
//            // 读取有效数据上限和下限
//            PropertiesUtils.readProperties(path + "effectiveData.properties", effectiveDataMap);
//
//
//            // 读取关系配置
//            String[] headers = new String[]{"user_id", "volt_code", "meter_id", "org_no", "org_name", "user_name"};
//            //填充用户到测点的关系map
////            yhMap = BJCsvUtils.CsvToObject(filePath, headers, yhgx);
//
//            String[] pbHeaders = new String[]{"cdId", "pbId", "cons_id", "dydj", "tran_name"};
//
//            //填充用户和台区的关系map k:用户id v:台区id
//            yhPidMap = BJCsvUtils.CsvToPb(path, pbHeaders, yhpb);
//
//            //填充配变到测点的关系map
//            pbGxMap = BJCsvUtils.CsvToPbCd(path, pbHeaders, pbgx);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    public static VoltageQualifiedVo getResult(CMS_VOLT_CURVE curve, Jedis jedis) {
//
//
////        if (flag) {
////            initReadProperties();
////            String pbgx = "20220812pbgx111";
////            String yhgx = "20220812yhgx111";
////            String yhpb = "20220812yhTopb111";
////            try {
////                readProperties(pbgx, yhgx, yhpb);
////            } catch (Exception e) {
////                e.printStackTrace();
////            }
////            flag = false;
////        }
//
//        String[] $24 = {"1", "5", "9", "13", "17", "21", "25", "29", "33", "37", "41", "45", "49", "53", "57", "61", "65", "69", "73", "77", "81", "85", "89", "93"};
//
//        pointList = Arrays.asList($24);
//        String logId = "";
//        VoltageQualifiedVo vo = null;
//
//        //初始化公共对象
//        VoltageQualified voltageQualified = EntityUtils.initVoltageQualified();
//
//        //越上限电压数组
//        StringBuilder upBuilder = new StringBuilder();
//        StringBuilder downBuilder = new StringBuilder();
//        voltageQualified.setUpBuilder(upBuilder);
//        voltageQualified.setDownBuilder(downBuilder);
//
//        //202207200000:217.6,202207200015:217.6,202207200030:217.6,20220720045:,
//        Map<Date, String> time$U = curve.getCOL_TIME$U();
//
////        long u1 = System.currentTimeMillis();
//
//
//        //将map转成List(u1-u96)
//        List<VoltU1_96> list = new ArrayList<>();
//        time$U.forEach((t, v) -> {
//            VoltU1_96 u1_96 = new VoltU1_96();
//            String point = DateUtils.getPoint(t);
//            u1_96.setU(point);
//            if (point.equals("0")) {
//                u1_96.setU("96");
//            }
//            u1_96.setV(v);
//            list.add(u1_96);
//        });
//
//        list.sort(Comparator.comparing(VoltU1_96::getU));
//
//
//        Set set = new HashSet();
//        Collections.addAll(set, $24);
//        //判断当前计量点是24个点还是96个点
//        if (list.size() <= 24) {
//            for (int i = 0; i < list.size(); i++) {
//                String u = list.get(i).getU();
//                set.add(u);
//            }
//            if (set.size() == 24) {
//                voltageQualified.setDyCount(24);
//            }
//        } else {
//            voltageQualified.setDyCount(96);
//        }
//
////        long u2 = System.currentTimeMillis();
//
//        //测点id
//        String cdId = Optional.ofNullable(curve.getMETER_ID())
//                .orElse(null);
//        logId = cdId;
//        Date date = Optional.ofNullable(curve.getDATA_DATE())
//                .orElse(null);
//        //相序标识
//        String phase_flag = Optional.ofNullable(curve.getPHASE_FLAG())
//                .orElse(null);
//        if (!phase_flag.equals("1")) {
//            return null;
//        }
//
//        //计算用户
//        String yh = yhMap.get(cdId);
//        String pb = pbGxMap.get(cdId);
//        if (yh != null) {
//            Gx gx = EntityUtils.StringToYhGx(yh);
//            setAc(acMap, voltageQualified, gx, effectiveDataMap, yzpbMap);
//
//            if (voltageQualified.getUp() == null || voltageQualified.getEffectiveDataUper() == null
//                    || voltageQualified.getYzYhPbUper() == null) {
//                log.info("阈值为空");
//                return null;
//            }
//            try {
//                vo = yh(cdId, date, voltageQualified, list, gx, jedis);
//            } catch (ParseException e) {
//                e.printStackTrace();
//            }
//        }
//
////         计算配变
////        String pb = jedis.get("PBGX@" + cdId);
//
//        if (pb != null) {
//            Gx gx = EntityUtils.StringToPbGx(pb);
//            setAc(pbacMap, voltageQualified, gx, effectiveDataMap, yzpbMap);
//            if (voltageQualified.getUp() == null || voltageQualified.getEffectiveDataUper() == null
//                    || voltageQualified.getYzYhPbUper() == null) {
//                return null;
//            }
//            vo = pb(cdId, date, voltageQualified, list, gx, jedis);
//
//
////            String vdtKey = "VDT@" + month + "@" + vo.getOrgNo() + "@" + vo.getSbId();
////            jp.sadd(vdtKey, vo.getSbId());
////
////            String seriousnessPb = vo.getSeriousnessPb();
////            if (seriousnessPb.equals("1")) {
////                String hvKey = "HV@" + month + "@" + vo.getSbId();
////                jp.sadd(hvKey, vo.getSbId());
////            }
////            num++;
//
//        }
//
//        if (ObjectUtil.isNull(vo)) {
//            return null;
//        }
//
//        return vo;
//    }
//
//
//    public static void setAc(HashMap<String, Double> pbacMap, VoltageQualified voltageQualified, Gx gx, HashMap<String, Double> effectiveDataMap, HashMap<String, Double> seriousnessMap) {
//
//        if (pbacMap.containsKey(gx.getUp())) {
//            Double up = pbacMap.get(gx.getUp());
//            Double down = pbacMap.get(gx.getDown());
//            voltageQualified.setUp(up);
//            voltageQualified.setDown(down);
//        }
//        if (seriousnessMap.containsKey(gx.getUp())) {
//            Double yzUper = seriousnessMap.get(gx.getUp());
//            Double yzDown = seriousnessMap.get(gx.getDown());
//            voltageQualified.setYzYhPbUper(yzUper);
//            voltageQualified.setYzYhPbDown(yzDown);
//        }
//        if (effectiveDataMap.containsKey(gx.getUp())) {
//            voltageQualified.setEffectiveDataUper(effectiveDataMap.get(gx.getUp()));
//            voltageQualified.setEffectiveDataLower(effectiveDataMap.get(gx.getDown()));
//        }
//
//
//        //后期变动判断有没有该设备的电压等级 有没有阈值  如果没有阈值就判断96个点的第一个 然后生成阈值 存入redis
//
//
//    }
//
//    public static VoltageQualifiedVo yh(String cdId, Date date, VoltageQualified voltageQualified, List<VoltU1_96> u1_96List, Gx gx, Jedis jedis) throws ParseException {
//
//        HashMap<String, Integer> blMap = new HashMap<>();
//        blMap.put("AC02202", 1);
//        blMap.put("AC03802", 1);
//        blMap.put("AC00061", 60);
//        blMap.put("AC00101", 100);
//        blMap.put("AC00201", 200);
//        blMap.put("AC00351", 350);
//        blMap.put("AC00661", 660);
//        blMap.put("AC01101", 1100);
//        blMap.put("AC02201", 2200);
//        blMap.put("AC03301", 3300);
//        blMap.put("AC05001", 5000);
//        //获取倍率 TODO
//
//        boolean flag = true;
//        for (int i = 0; i < u1_96List.size(); i++) {
//            String v = u1_96List.get(i).getV();
//            if (StringUtils.isNotBlank(v)) {
//                double u = Double.parseDouble(v);
//                voltageQualified.setVoltage(u);
//
//                //判断当前电压等级是高压还是低压 电压值具体是多少 需不需要*根号三
//                FormulaUtils.yhMagnification(voltageQualified, gx, blMap, u);
//                //如果当前是无效数据 则不统计 跳出当前循环
//                if (voltageQualified.getValid().equals("2")) {
//                    continue;
//                }
//
//
//                voltageQualified.setIndex(i);
//                double v1 = voltageQualified.getDyPracticalCount() + 1;
//                voltageQualified.setDyPracticalCount(v1);
//                if (flag) {
//                    voltageQualified.setMax(u);
//                    voltageQualified.setMin(u);
//                    flag = false;
//                }
//
//
//                FormulaUtils.IsVoltageQualified(voltageQualified);
//            }
//        }
//
//        FormulaUtils.consType(voltageQualified);
//
//        int timeBl = 15;
//        if (voltageQualified.getDyCount() == 96) {
//            timeBl = 15;
//        } else if (voltageQualified.getDyCount() == 24) {
//            timeBl = 60;
//        }
//
//        DateTime minValueTime = DateUtil.offsetMinute(date, voltageQualified.getMinUOffset() * timeBl);
//        DateTime maxValueTime = DateUtil.offsetMinute(date, voltageQualified.getMaxUOffset() * timeBl);
//
//        VoltageLevelEnum voltageLevelEnum = VoltageLevelEnum.valueOf(gx.getDydj());
//        if (voltageQualified.getNotNullPoint() == 0) {
//            return null;
//        }
//
//        double avg = voltageQualified.getTotalU() / voltageQualified.getNotNullPoint();
////        voltageQualified.setOffset(1);
//
//        String pbArray = voltageQualified.getPbArray();
//        String pbarrays = "";
//        if (pbArray != null && pbArray.length() > 1) {
//            pbarrays = pbArray.substring(0, pbArray.length() - 1);
//        }
//        Integer dyCount = voltageQualified.getDyCount();
//        Integer count = 0;
//        if (dyCount != null && dyCount > 24) {
//            count = 96;
//        } else {
//            count = 24;
//        }
//
//
//        return VoltageQualifiedVo.builder()
//                .id(cdId)
//                .sbName(gx.getUserName())
//                .sbId(gx.getUserId())
//                .dateTime(date)
//                .dyCount(count.doubleValue())
//                .uperTimeArray(voltageQualified.getUpBuilder().toString())
//                .lowerTimeArray(voltageQualified.getDownBuilder().toString())
//                .monitorTime(voltageQualified.getMonitorTime())
//                .upTime(voltageQualified.getUpTime())
//                .downTime(voltageQualified.getDownTime())
//                .deviceType(Constant.SbTypeEnum.YH.getType().toString())
//                .deviceLevel(Constant.SbLevelEnum.YH.getType())
//                .pid(yhPidMap.get(gx.getUserId()))
//                .maxValue(voltageQualified.getMax())
//                .minValue(voltageQualified.getMin())
//                .minValueTime(minValueTime)
//                .maxValueTime(maxValueTime)
//                .dyPracticalCount(voltageQualified.getDyPracticalCount())
//                .orgNo(gx.getOrgNo())
////                .orgName(gx.getOrgName())
//                .voltageLevel(voltageLevelEnum.getCode())
//                .avg(avg)
//                .effectiveDataTime(voltageQualified.getEffectiveDataTime())
//                .gridType(gx.getGridType())
//                .consType(voltageQualified.getConsType())
//                .pbArray(pbarrays)
//                .highVoltage(voltageQualified.getHighVoltage().toString())
//                .lowVoltage(voltageQualified.getLowVoltage().toString())
//                .severeHighVoltage(voltageQualified.getSevereHighVoltage().toString())
//                .severelyLowVoltage(voltageQualified.getSeverelyLowVoltage().toString())
//                .build();
//    }
//
//
//    public static VoltageQualifiedVo pb(String cdId, Date date, VoltageQualified voltageQualified, List<VoltU1_96> u1_96List, Gx gx, Jedis jedis) {
//
//
//        boolean flag = true;
//        for (int i = 0; i < u1_96List.size(); i++) {
//            String v = u1_96List.get(i).getV();
//            if (StringUtils.isNotBlank(v)) {
//                Double u = Double.valueOf(v);
//
//
//                //判断配变需不需要*根号三
//                FormulaUtils.pbMagnification(voltageQualified, gx, u);
//
//                //如果当前是无效数据 则不统计 跳出当前循环
//                if (voltageQualified.getValid().equals("2")) {
//                    continue;
//                }
//                //获取当前下标
//                voltageQualified.setIndex(i);
//                double v1 = voltageQualified.getDyPracticalCount() + 1;
//                voltageQualified.setDyPracticalCount(v1);
//                if (flag) {
//                    voltageQualified.setMax(u);
//                    voltageQualified.setMin(u);
//                    flag = false;
//                }
//                FormulaUtils.IsVoltageQualified(voltageQualified);
//                FormulaUtils.pbYzYs(voltageQualified);
//            }
//        }
//
//
//        int timeBl = 15;
//        if (voltageQualified.getDyCount() == 96) {
//            timeBl = 15;
//        } else if (voltageQualified.getDyCount() == 24) {
//            timeBl = 60;
//        }
//
//        FormulaUtils.Pbcs(voltageQualified);
//
//        DateTime minValueTime = DateUtil.offsetMinute(date, voltageQualified.getMinUOffset() * timeBl);
//        DateTime maxValueTime = DateUtil.offsetMinute(date, voltageQualified.getMaxUOffset() * timeBl);
//        VoltageLevelEnum voltageLevelEnum = VoltageLevelEnum.valueOf(gx.getDydj());
//
//        Double avg = 0D;
//        if (voltageQualified.getNotNullPoint() != 0) {
//            avg = voltageQualified.getTotalU() / voltageQualified.getNotNullPoint();
//        }
//        BigDecimal b = new BigDecimal(avg);
//        Double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//        Integer yzyxTime = voltageQualified.getYzyxTime();
//
//        //是否是严重越上配变  严重越上时间大于60为严重越上配变
//        String s = "0";
//        if (yzyxTime > 60) {
//            s = "1";
//        }
//
//        //电压波动率
//        if (voltageQualified.getMax() == null) {
//            voltageQualified.setMax(0D);
//        }
//        Double voltageFluctuation = FormulaUtils.voltageFluctuation(voltageQualified.getMax(), gx.getDydj());
//
//        String pbArray = voltageQualified.getPbArray();
//
//        String pbarrays = "";
//        if (pbArray != null && pbArray.length() > 1) {
//            pbarrays = pbArray.substring(0, pbArray.length() - 1);
//        }
//
//        Integer dyCount = voltageQualified.getDyCount();
//        Integer count = 0;
//        if (dyCount != null && dyCount > 24) {
//            count = 96;
//        } else {
//            count = 24;
//        }
//
//
//        return VoltageQualifiedVo.builder()
//                .id(cdId)
//                .sbName(gx.getTranName())
//                .sbId(gx.getPbId())
//                .dateTime(date)
//                .dyCount(count.doubleValue())
//                .uperTimeArray(voltageQualified.getUpBuilder().toString())
//                .lowerTimeArray(voltageQualified.getDownBuilder().toString())
//                .monitorTime(voltageQualified.getMonitorTime())
//                .upTime(voltageQualified.getUpTime())
//                .downTime(voltageQualified.getDownTime())
//                .deviceType(Constant.SbTypeEnum.PB.getType().toString())
//                .deviceLevel(Constant.SbLevelEnum.PB.getType())
//                .pid("")
//                .maxValue(voltageQualified.getMax())
//                .minValue(voltageQualified.getMin())
//                .minValueTime(minValueTime)
//                .maxValueTime(maxValueTime)
//                .dyPracticalCount(voltageQualified.getDyPracticalCount())
//                .orgNo(gx.getOrgNo())
////                .orgName(gx.getOrgName())
//                .voltageLevel(voltageLevelEnum.getCode())
//                .avg(f1)
//                .effectiveDataTime(voltageQualified.getEffectiveDataTime())
//                .seriousnessPb(s)
//                .voltageFluctuation(voltageFluctuation)
//                .pbArray(pbarrays)
//                .pbcs(voltageQualified.getPbcs())
//                .pbtype(voltageQualified.getPbType())
//                .gridType(gx.getGridType())
//                .build();
//
//    }
//
//    public static void readMap(String pbgx, String yhgx, String yhpb, Map<String, Void> METER_IDS) throws Exception {
//
//        log.info("加载完成阈值关系");
//        //月份20220103
//        String month = pbgx.substring(4, 6);
//
//        //读取关系配置
//        String[] headers = new String[]{"user_id", "volt_code", "meter_id", "org_no", "org_name", "user_name"};
//        String filePath = System.getProperty("user.dir") + File.separator + "conf" + File.separator;
//        filePath = "/jenkins_home/datax/bin/conf/";
//        //填充用户到测点的关系map
//        yhMap = BJCsvUtils.CsvToObject2(filePath, headers, month, yhgx, METER_IDS);
//        log.info("加载完成用户测点关系: " + yhMap.size());
//
////        String[] pbHeaders = new String[]{"cdId", "pbId", "volt_code", "tran_name", "org_no", "grid_type", "equip_id", "edrl", "sbxh", "tyrq"};
////        String pbFilePath = System.getProperty("user.dir") + File.separator + "conf" + File.separator;
////        //填充用户和台区的关系map
////        yhPidMap = CsvUtils.CsvToPb(pbFilePath, pbHeaders, yhpb);
////        log.info("加载完成用户台区关系: " + yhPidMap.size());
////
////        //填充配变到测点的关系map
////        pbGxMap = CsvUtils.CsvToPbCd(pbFilePath, pbHeaders, pbgx, month);
////        log.info("加载完成配变测点关系: " + pbGxMap.size());
//    }
//
//    public static void main(String[] args) throws Exception {
//        String filePath = "C:\\Users\\HUAWEI\\Desktop\\";
//        String[] headers = new String[]{"user_id", "volt_code", "meter_id", "org_no", "org_name", "user_name"};
//        BJCsvUtils.CsvToObject2(filePath, headers, null, yhgx, null);
//    }
//}
